package com.candy.blog.web.admin;

import com.candy.blog.pojo.User;
import com.candy.blog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.http.HttpSession;
/**
 * 关于重定向RedirectAttributes的用法
 * RedirectAttributes,专门用于重定向之后还能带参数跳转的工具类
 * 有两种方式：用了其中一种
 * 1、redirectAttributes.addFlashAttributie("param",value);
 * --这种方式是隐藏了参数，链接地址上不直接暴露，但是能而且只在重定向的"页面"获取param参数值。其原理就是放到session中，session在跳转页面后马上移除对象。
 * <p>
 * 如果是重定向一个controller中是获取不到该param属性值的。
 * 除非在controller中用(@ModelAttribute(value = “param”)String param)注解，采用传参的方式。
 */

/**
 * @version 1.0
 * @author: 南风
 * @description 后台管理
 * @date: 2021/12/26 21:07
 */
@Controller
@RequestMapping("/admin")
public class LoginController {
    @Autowired
    private UserService userService;

    @GetMapping()
    public String loginPage() {
        return "admin/login";
    }

    @PostMapping("/login")
    public String login(@RequestParam String username,
                        @RequestParam String password,
                        HttpSession session,
                        RedirectAttributes attributes) {
        User user = userService.checkUser(username, password);
        if (user != null) {
            // 给密码设置null 避免将密码传到客户端的session中
            user.setPassword(null);
            // 将用户信息放到session中
            session.setAttribute("user", user);
            return "admin/index";
        } else {
            attributes.addFlashAttribute("message", "用户名和密码错误");
            return "redirect:/admin";
        }
    }

    // 登出
    @GetMapping("/logout")
    public String logout(HttpSession session) {
        // 登出之后将session中的信息清空
        session.removeAttribute("user");
        return "redirect:/admin";

    }
}
